﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Registro.Compras.Api.Models;
using Registro.Compras.Data.Business;
using Registro.Compras.Data.Entities;
using System.Web.Http.Cors;

namespace Registro.Compras.Api.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class Base1Controller : ApiController
    {
        // GET api/<controller>
        public IEnumerable<Base1Model> Get()
        {
            //return new string[] { "value1", "value2" };
            return Base1Business.GetListByFilter("").Select(
                t => new Base1Model
                {
                    Id = t.Id,
                    FechaEmision = t.FechaEmision,
                    FechaVencimiento = t.FechaVencimiento,
                    Tabla10Id  = t.Tabla10Id ,
                    Tabla10Model = new Tabla10Model
                    {
                        Id = t.Tabla10.Id,
                        Descripcion = t.Tabla10.Descripcion,
                    },
                    Serie = t.Serie,
                    AnoEmisionDua  = t.AnoEmisionDua ,
                    N_Comprobante = t.N_Comprobante,
                    ProveedorId = t.ProveedorId,
                    ProveedorModel = new ProveedorModel
                    {
                        Id = t.Proveedor.Id,
                        Tabla2Id = t.Proveedor.Tabla2Id,
                        Numero = t.Proveedor.Numero,
                        RazonSocial = t.Proveedor.RazonSocial,
                    },
                    DescripcionM = t.DescripcionM,
                    BaseImponibleId = t.BaseImponibleId,
                    BaseImponibleModel = new BaseImponibleModel{
                        Id = t.BaseImponible.Id,
                        Nombre = t.BaseImponible.Nombre,
                    },
                    Operacion1 = t.Operacion1,
                    Codigo1 = t.Codigo1,
                    Debe1 = t.Debe1,
                    Haber1 = t.Haber1,
                    Codigo2 = t.Codigo2,
                    Debe2 = t.Debe2,
                    Haber2 = t.Haber2,
                    Codigo3 = t.Codigo3,
                    Debe3 = t.Debe3,
                    Haber3 =t.Haber3,
                    Operacion2 = t.Operacion2,
                    Codigo4 = t.Codigo4,
                    Debe4 = t.Debe4,
                    Haber4 = t.Haber4,
                    Codigo5 = t.Codigo5,
                    Debe5 = t.Debe5,
                    Haber5 = t.Haber5,
                    Operacion3 = t.Operacion3,
                    Codigo6 = t.Codigo6,
                    Debe6 = t.Debe6,
                    Haber6 = t.Haber6,
                    Codigo7 = t.Codigo7,
                    Debe7 = t.Debe7,
                    Haber7 = t.Haber7,
                    AdquisicionesNoGravadas = t.AdquisicionesNoGravadas,
                    ISC = t.ISC,
                    OtrosTributos = t.OtrosTributos,
                    ImporteTotal = t.ImporteTotal,
                    PagoNoDomiciliado = t.PagoNoDomiciliado,
                    CDD_Numero = t.CDD_Numero,
                    CDD_FechaEmision = t.CDD_FechaEmision,
                    TipodeCambio = t.TipodeCambio,
                    EncabezadoId = t.EncabezadoId,
                    EncabezadoModel = new EncabezadoModel
                    {
                        Id = t.Encabezado.Id,
                        Periodo = t.Encabezado.Periodo,
                        Ruc = t.Encabezado.Ruc,
                        Razon_Social = t.Encabezado.Razon_Social,
                        Estado = t.Encabezado.Estado,
                    },
                });
        }

        // GET api/<controller>/5
        public Base1Model Get(int id)
        {
            Base1 t = Base1Business.GetById(id);
            return new Base1Model
            {
                Id = t.Id,
                FechaEmision = t.FechaEmision,
                FechaVencimiento = t.FechaVencimiento,
                Tabla10Id  = t.Tabla10Id ,
                Serie = t.Serie,
                AnoEmisionDua  = t.AnoEmisionDua ,
                N_Comprobante = t.N_Comprobante,
                ProveedorId = t.ProveedorId,
                BaseImponibleId = t.BaseImponibleId,
                DescripcionM = t.DescripcionM,
                Operacion1 = t.Operacion1,
                Codigo1 = t.Codigo1,
                Debe1 = t.Debe1,
                Haber1 = t.Haber1,
                Codigo2 = t.Codigo2,
                Debe2 = t.Debe2,
                Haber2 = t.Haber2,
                Codigo3 = t.Codigo3,
                Debe3 = t.Debe3,
                Haber3 = t.Haber3,
                Operacion2 = t.Operacion2,
                Codigo4 = t.Codigo4,
                Debe4 = t.Debe4,
                Haber4 = t.Haber4,
                Codigo5 = t.Codigo5,
                Debe5 = t.Debe5,
                Haber5 = t.Haber5,
                Operacion3 = t.Operacion3,
                Codigo6 = t.Codigo6,
                Debe6 = t.Debe6,
                Haber6 = t.Haber6,
                Codigo7 = t.Codigo7,
                Debe7 = t.Debe7,
                Haber7 = t.Haber7,
                AdquisicionesNoGravadas = t.AdquisicionesNoGravadas,
                ISC = t.ISC,
                OtrosTributos = t.OtrosTributos,
                ImporteTotal = t.ImporteTotal,
                PagoNoDomiciliado = t.PagoNoDomiciliado,
                CDD_Numero = t.CDD_Numero,
                CDD_FechaEmision = t.CDD_FechaEmision,
                TipodeCambio = t.TipodeCambio,
                EncabezadoId = t.EncabezadoId,
            };
        }

        // POST api/<controller>
        public Base1Model Post([FromBody]Base1Model model)
        {
            Base1 t = Base1Business.Create(new Base1
            {
                FechaEmision = model.FechaEmision,
                FechaVencimiento = model.FechaVencimiento,
                Tabla10Id  = model.Tabla10Id ,
                Serie = model.Serie,
                AnoEmisionDua  = model.AnoEmisionDua ,
                N_Comprobante = model.N_Comprobante,
                ProveedorId = model.ProveedorId,
                BaseImponibleId = model.BaseImponibleId,
                DescripcionM = model.DescripcionM,
                Operacion1 = model.Operacion1,
                Codigo1 = model.Codigo1,
                Debe1 = model.Debe1,
                Haber1 = model.Haber1,
                Codigo2 = model.Codigo2,
                Debe2 = model.Debe2,
                Haber2 = model.Haber2,
                Codigo3 = model.Codigo3,
                Debe3 = model.Debe3,
                Haber3 = model.Haber3,
                Operacion2 = model.Operacion2,
                Codigo4 = model.Codigo4,
                Debe4 = model.Debe4,
                Haber4 = model.Haber4,
                Codigo5 = model.Codigo5,
                Debe5 = model.Debe5,
                Haber5 = model.Haber5,
                Operacion3 = model.Operacion3,
                Codigo6 = model.Codigo6,
                Debe6 = model.Debe6,
                Haber6 = model.Haber6,
                Codigo7 = model.Codigo7,
                Debe7 = model.Debe7,
                Haber7 = model.Haber7,
                AdquisicionesNoGravadas = model.AdquisicionesNoGravadas,
                ISC = model.ISC,
                OtrosTributos = model.OtrosTributos,
                ImporteTotal = model.ImporteTotal,
                PagoNoDomiciliado = model.PagoNoDomiciliado,
                CDD_Numero = model.CDD_Numero,
                CDD_FechaEmision = model.CDD_FechaEmision,
                TipodeCambio = model.TipodeCambio,
                EncabezadoId = model.EncabezadoId,
            });
            return new Base1Model
            {
                Id = t.Id,
                FechaEmision = t.FechaEmision,
                FechaVencimiento = t.FechaVencimiento,
                Tabla10Id  = t.Tabla10Id ,
                Tabla10Model = new Tabla10Model
                {
                    Id = t.Tabla10.Id,
                    Descripcion = t.Tabla10.Descripcion,
                },
                Serie = t.Serie,
                AnoEmisionDua  = t.AnoEmisionDua ,
                N_Comprobante = t.N_Comprobante,
                ProveedorId = t.ProveedorId,
                ProveedorModel = new ProveedorModel
                {
                    Id = t.Proveedor.Id,
                    Tabla2Id = t.Proveedor.Tabla2Id,
                    Numero = t.Proveedor.Numero,
                    RazonSocial = t.Proveedor.RazonSocial,
                },
                DescripcionM = t.DescripcionM,
                BaseImponibleId = t.BaseImponibleId,
                BaseImponibleModel = new BaseImponibleModel
                {
                    Id = t.BaseImponible.Id,
                    Nombre = t.BaseImponible.Nombre,
                },
                Operacion1 = t.Operacion1,
                Codigo1 = t.Codigo1,
                Debe1 = t.Debe1,
                Haber1 = t.Haber1,
                Codigo2 = t.Codigo2,
                Debe2 = t.Debe2,
                Haber2 = t.Haber2,
                Codigo3 = t.Codigo3,
                Debe3 = t.Debe3,
                Haber3 = t.Haber3,
                Operacion2 = t.Operacion2,
                Codigo4 = t.Codigo4,
                Debe4 = t.Debe4,
                Haber4 = t.Haber4,
                Codigo5 = t.Codigo5,
                Debe5 = t.Debe5,
                Haber5 = t.Haber5,
                Operacion3 = t.Operacion3,
                Codigo6 = t.Codigo6,
                Debe6 = t.Debe6,
                Haber6 = t.Haber6,
                Codigo7 = t.Codigo7,
                Debe7 = t.Debe7,
                Haber7 = t.Haber7,
                AdquisicionesNoGravadas = t.AdquisicionesNoGravadas,
                ISC = t.ISC,
                OtrosTributos = t.OtrosTributos,
                ImporteTotal = t.ImporteTotal,
                PagoNoDomiciliado = t.PagoNoDomiciliado,
                CDD_Numero = t.CDD_Numero,
                CDD_FechaEmision = t.CDD_FechaEmision,
                TipodeCambio = t.TipodeCambio,
                EncabezadoId = t.EncabezadoId,
                EncabezadoModel = new EncabezadoModel
                {
                    Id = t.Encabezado.Id,
                    Periodo = t.Encabezado.Periodo,
                    Ruc = t.Encabezado.Ruc,
                    Razon_Social = t.Encabezado.Razon_Social,
                    Estado = t.Encabezado.Estado,
                },
            };
        }

        // PUT api/<controller>/5
        public Base1Model Put(int id, [FromBody]Base1Model model)
        {
            Base1 t = Base1Business.Update(new Base1
            {
                Id = id,
                FechaEmision = model.FechaEmision,
                FechaVencimiento = model.FechaVencimiento,
                Tabla10Id  = model.Tabla10Id ,
                Serie = model.Serie,
                AnoEmisionDua  = model.AnoEmisionDua ,
                N_Comprobante = model.N_Comprobante,
                ProveedorId = model.ProveedorId,
                BaseImponibleId = model.BaseImponibleId,
                DescripcionM = model.DescripcionM,
                Operacion1 = model.Operacion1,
                Codigo1 = model.Codigo1,
                Debe1 = model.Debe1,
                Haber1 = model.Haber1,
                Codigo2 = model.Codigo2,
                Debe2 = model.Debe2,
                Haber2 = model.Haber2,
                Codigo3 = model.Codigo3,
                Debe3 = model.Debe3,
                Haber3 = model.Haber3,
                Operacion2 = model.Operacion2,
                Codigo4 = model.Codigo4,
                Debe4 = model.Debe4,
                Haber4 = model.Haber4,
                Codigo5 = model.Codigo5,
                Debe5 = model.Debe5,
                Haber5 = model.Haber5,
                Operacion3 = model.Operacion3,
                Codigo6 = model.Codigo6,
                Debe6 = model.Debe6,
                Haber6 = model.Haber6,
                Codigo7 = model.Codigo7,
                Debe7 = model.Debe7,
                Haber7 = model.Haber7,
                AdquisicionesNoGravadas = model.AdquisicionesNoGravadas,
                ISC = model.ISC,
                OtrosTributos = model.OtrosTributos,
                ImporteTotal = model.ImporteTotal,
                PagoNoDomiciliado = model.PagoNoDomiciliado,
                CDD_Numero = model.CDD_Numero,
                CDD_FechaEmision = model.CDD_FechaEmision,
                TipodeCambio = model.TipodeCambio,
                EncabezadoId = model.EncabezadoId,
            });
            return new Base1Model
            {
                Id = t.Id,
                FechaEmision = t.FechaEmision,
                FechaVencimiento = t.FechaVencimiento,
                Tabla10Id  = t.Tabla10Id ,
                Tabla10Model = new Tabla10Model
                {
                    Id = t.Tabla10.Id,
                    Descripcion = t.Tabla10.Descripcion,
                },
                Serie = t.Serie,
                AnoEmisionDua  = t.AnoEmisionDua ,
                N_Comprobante = t.N_Comprobante,
                ProveedorId = t.ProveedorId,
                ProveedorModel = new ProveedorModel
                {
                    Id = t.Proveedor.Id,
                    Tabla2Id = t.Proveedor.Tabla2Id,
                    Numero = t.Proveedor.Numero,
                    RazonSocial = t.Proveedor.RazonSocial,
                },
                DescripcionM = t.DescripcionM,
                BaseImponibleId = t.BaseImponibleId,
                BaseImponibleModel = new BaseImponibleModel
                {
                    Id = t.BaseImponible.Id,
                    Nombre = t.BaseImponible.Nombre,
                },
                Operacion1 = t.Operacion1,
                Codigo1 = t.Codigo1,
                Debe1 = t.Debe1,
                Haber1 = t.Haber1,
                Codigo2 = t.Codigo2,
                Debe2 = t.Debe2,
                Haber2 = t.Haber2,
                Codigo3 = t.Codigo3,
                Debe3 = t.Debe3,
                Haber3 = t.Haber3,
                Operacion2 = t.Operacion2,
                Codigo4 = t.Codigo4,
                Debe4 = t.Debe4,
                Haber4 = t.Haber4,
                Codigo5 = t.Codigo5,
                Debe5 = t.Debe5,
                Haber5 = t.Haber5,
                Operacion3 = t.Operacion3,
                Codigo6 = t.Codigo6,
                Debe6 = t.Debe6,
                Haber6 = t.Haber6,
                Codigo7 = t.Codigo7,
                Debe7 = t.Debe7,
                Haber7 = t.Haber7,
                AdquisicionesNoGravadas = t.AdquisicionesNoGravadas,
                ISC = t.ISC,
                OtrosTributos = t.OtrosTributos,
                ImporteTotal = t.ImporteTotal,
                PagoNoDomiciliado = t.PagoNoDomiciliado,
                CDD_Numero = t.CDD_Numero,
                CDD_FechaEmision = t.CDD_FechaEmision,
                TipodeCambio = t.TipodeCambio,
                EncabezadoId = t.EncabezadoId,
                EncabezadoModel = new EncabezadoModel
                {
                    Id = t.Encabezado.Id,
                    Periodo = t.Encabezado.Periodo,
                    Ruc = t.Encabezado.Ruc,
                    Razon_Social = t.Encabezado.Razon_Social,
                    Estado = t.Encabezado.Estado,
                },
            };
        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {
            Base1Business.Delete(id);
        }
    }
}